package org.fanrui.hrm.feign.clients;

import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;
import org.fanrui.hrm.domain.Login;
import org.fanrui.hrm.dto.LoginMealDto;
import org.fanrui.hrm.util.AjaxResult;
import org.springframework.stereotype.Component;

/**
 * 登录服务降级
 *
 * @author fanrui
 */
@Component
@Slf4j
public class LoginFeignClientFallbackFactory implements FallbackFactory<LoginFeignClients> {
    /**
     * 创建一个LoginFeignClients实例
     * 此方法用作错误处理，当传入的Throwable存在时，表示创建过程中发生了异常
     *
     * @param throwable 可能发生的异常
     * @return 返回一个函数，该函数在调用时处理异常并返回一个表示登录失败的AjaxResult
     */
    @Override
    public LoginFeignClients create(Throwable throwable) {
        return new LoginFeignClients() {
            @Override
            public AjaxResult save(Login login) {
                log.error("保存login到认证中心异常:{}", throwable.getMessage());
                throwable.printStackTrace();
                return AjaxResult.me().setSuccess(false).setMessage("保存失败！").setResultObj(null);
            }

            @Override
            public AjaxResult saveLoginAndMealId(LoginMealDto loginMealDto) {
                log.error("保存login和mealId到认证中心异常:{}", throwable.getMessage());
                throwable.printStackTrace();
                return AjaxResult.me().setSuccess(false).setMessage("保存失败！").setResultObj(null);
            }
        };
    }
}
